package com.smartleanx.module.hrm.controller.admin.employee.vo;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import java.util.*;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import com.alibaba.excel.annotation.*;
import com.smartleanx.framework.excel.core.annotations.DictFormat;
import com.smartleanx.framework.excel.core.convert.DictConvert;

@Schema(description = "管理后台 - 员工 Response VO")
@Data
public class EmployeeRespVO {

    @Schema(description = "员工id", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("员工id")
    private Long id;

    @Schema(description = "姓名", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("姓名")
    private String name;

    @Schema(description = "手机", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("手机")
    private String mobile;

    @Schema(description = "证件类型", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty(value = "证件类型", converter = DictConvert.class)
    private Integer idType;

    @Schema(description = "证件号码", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("证件号码")
    private String idNumber;

    @Schema(description = "性别", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty(value = "性别", converter = DictConvert.class)
    private Integer sex;

    @Schema(description = "最高学历")
    @ExcelProperty(value = "最高学历", converter = DictConvert.class)
    @DictFormat("hrm_highest_education") // TODO 代码优化：建议设置到对应的 DictTypeConstants 枚举类中
    private Integer highestEducation;

    @Schema(description = "籍贯")
    @ExcelProperty("籍贯")
    private String nativePlace;

    @Schema(description = "出生日期")
    @ExcelProperty("出生日期")
    private LocalDateTime dateOfBirth;

    @Schema(description = "生日类型 1 阳历 2 农历")
    @ExcelProperty(value = "生日类型 1 阳历 2 农历", converter = DictConvert.class)
    @DictFormat("system_calendar_type") // TODO 代码优化：建议设置到对应的 DictTypeConstants 枚举类中
    private Integer birthdayType;

    @Schema(description = "生日（示例：0213）")
    @ExcelProperty("生日")
    private String birthday;

    @Schema(description = "入职时间")
    @ExcelProperty("入职时间")
    private LocalDateTime entryTime;

    @Schema(description = "计划离职日期")
    @ExcelProperty("计划离职日期")
    private LocalDateTime planSeparationTime;

    @Schema(description = "申请离职日期")
    @ExcelProperty("申请离职日期")
    private LocalDateTime applySeparationTime;

    @Schema(description = "离职类型")
    @ExcelProperty("离职类型")
    private Integer separationType;

    @Schema(description = "离职原因")
    @ExcelProperty("离职原因")
    private Integer separationReason;

    @Schema(description = "离职备注")
    @ExcelProperty("离职备注")
    private String separationRemarks;

    @Schema(description = "司龄")
    @ExcelProperty("司龄")
    private Integer companyAge;

    @Schema(description = "员工号", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("员工号")
    private String employeeNo;

    @Schema(description = "部门ID")
    private Long deptId;

    @Schema(description = "部门名称")
    @ExcelProperty("部门")
    private String deptName;

    @Schema(description = "岗位id")
    private Long postId;

    @Schema(description = "岗位名称")
    @ExcelProperty("岗位")
    private String postName;

    @Schema(description = "直属上级ID")
    @ExcelProperty("直属上级ID")
    private Long leaderId;

    @Schema(description = "聘用形式")
    @ExcelProperty(value = "聘用形式", converter = DictConvert.class)
    @DictFormat("hrm_employment_form") // TODO 代码优化：建议设置到对应的 DictTypeConstants 枚举类中
    private Integer employmentForm;

    @Schema(description = "聘用类型")
    @ExcelProperty(value = "聘用类型", converter = DictConvert.class)
    @DictFormat("hrm_employment_type") // TODO 代码优化：建议设置到对应的 DictTypeConstants 枚举类中
    private Integer employmentType;

    @Schema(description = "员工状态", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty(value = "员工状态", converter = DictConvert.class)
    @DictFormat("hrm_employee_status") // TODO 代码优化：建议设置到对应的 DictTypeConstants 枚举类中
    private Integer state;

    @Schema(description = "试用期 0 无试用期", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty(value = "试用期 0 无试用期", converter = DictConvert.class)
    @DictFormat("hrm_probation_period") // TODO 代码优化：建议设置到对应的 DictTypeConstants 枚举类中
    private Integer probationPeriod;

    @Schema(description = "工作地点")
    @ExcelProperty("工作地点")
    private String workAddress;

    @Schema(description = "是否已婚")
    private Boolean married;

    @Schema(description = "是否已育")
    private Boolean fertilized;

    @Schema(description = "健康状态")
    private Boolean healthStatus;

    @Schema(description = "现居地址")
    private String currentAddress;

    @Schema(description = "工资卡卡号")
    private String cardNumber;

    @Schema(description = "银行名称")
    private String bankName;

    @Schema(description = "开户行")
    private String openingBank;

    @Schema(description = "岗级id")
    private Integer postLevelId;

    @Schema(description = "户籍地址")
    private String residenceAddress;

    @Schema(description = "个人邮箱")
    private String personalEmail;

    @Schema(description = "紧急联系人")
    private String emergencyContact;

    @Schema(description = "紧急联系人电话")
    private String emergencyContactNumber;
}
